package org.jeecg.modules.mes.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * MES生产统计Mapper接口
 * 
 * @author wanke-erp
 * @since 2025-09-15
 */
@Mapper
public interface MesStatisticsMapper {

    /**
     * 获取生产计划完成率
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 生产计划完成率数据
     */
    Map<String, Object> getPlanCompletionRate(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取任务按时完成率
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 任务按时完成率数据
     */
    Map<String, Object> getOnTimeCompletionRate(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取平均生产周期
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 平均生产周期数据
     */
    Map<String, Object> getAverageProductionCycle(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取员工生产效率概览
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 员工生产效率概览数据
     */
    Map<String, Object> getEmployeeEfficiencyOverview(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取计划数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param timeType 时间类型
     * @return 计划数据列表
     */
    List<Map<String, Object>> getPlanData(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("timeType") String timeType);

    /**
     * 获取实际数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param timeType 时间类型
     * @return 实际数据列表
     */
    List<Map<String, Object>> getActualData(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("timeType") String timeType);

    /**
     * 获取生产效率趋势数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param timeType 时间类型
     * @return 生产效率趋势数据列表
     */
    List<Map<String, Object>> getProductionEfficiencyTrend(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("timeType") String timeType);

    /**
     * 获取工序耗时分析数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 工序耗时分析数据列表
     */
    List<Map<String, Object>> getProcessTimeAnalysis(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取任务状态分布数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 任务状态分布数据列表
     */
    List<Map<String, Object>> getTaskStatusDistribution(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取员工效率排行榜
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param limit 返回记录数限制
     * @return 员工效率排行榜数据列表
     */
    List<Map<String, Object>> getEmployeeEfficiencyRanking(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("limit") Integer limit);

    /**
     * 获取员工产量排行
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param limit 返回记录数限制
     * @return 员工产量排行数据列表
     */
    List<Map<String, Object>> getEmployeeProductionRanking(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("limit") Integer limit);

    /**
     * 获取工时利用率统计
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 工时利用率统计数据列表
     */
    List<Map<String, Object>> getWorkHourUtilization(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取技能分布统计
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 技能分布统计数据列表
     */
    List<Map<String, Object>> getSkillDistribution(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取培训效果分析
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 培训效果分析数据列表
     */
    List<Map<String, Object>> getTrainingEffectAnalysis(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取人员效率概览统计
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 人员效率概览统计数据
     */
    Map<String, Object> getPersonnelEfficiencyOverview(@Param("startDate") String startDate, @Param("endDate") String endDate);
}
